import hashlib


def C(str_value, obj):
    """
    该函数用于将字符串和对象拼接成一个新的字符串
    :param str_value: 输入的字符串
    :param obj: 输入的对象
    :return: 拼接后的字符串
    """
    return str(str_value) + str(obj)


def h(str_value):
    """
    该函数用于对输入的字符串进行 MD5 哈希计算，并将结果转换为十六进制字符串
    :param str_value: 输入的字符串
    :return: MD5 哈希后的十六进制字符串
    """
    try:
        # 创建 MD5 哈希对象
        message_digest = hashlib.md5()
        # 将字符串编码为字节并更新到哈希对象中
        message_digest.update(str_value.encode('utf-8'))
        return message_digest.hexdigest()
        # # 计算 MD5 哈希值
        # digest = message_digest.digest()
        # # 将字节数组转换为十六进制字符串
        # hex_digest = ''.join(f'{byte:02x}' for byte in digest)
        # return hex_digest
    except Exception as e:
        print(f"Error: {e}")
        return ""


def get_encrypt_pwd(str_value):
    """
    该函数对输入的字符串进行 5 次 MD5 哈希计算，每次计算前会拼接固定字符串 "分享合伙人"
    :param str_value: 输入的字符串
    :return: 经过 5 次 MD5 哈希计算后的字符串
    """
    # 输入参数检查
    if not str_value:
        raise ValueError("输入的字符串不能为空")
    for _ in range(5):
        # 拼接字符串
        new_str = C(str_value, "分享合伙人")
        # 进行 MD5 哈希计算
        str_value = h(new_str)
    return str_value

def e(param_map):
    # 检查输入的字典是否为 None
    if param_map is None:
        raise ValueError("paramMap 不能为空")

    # 使用 Python 的字典，它在 Python 3.7 及以后版本是有序的，类似于 Java 的 TreeMap
    sorted_map = dict(sorted(param_map.items()))
    result = ""
    for key, value in sorted_map.items():
        if key != "sgin":
            result += key
            if value is not None:
                result += value
    return result


def get_sign(params, t):
    # '1742572004536 YKGblGFlmFDDbbnREFV passWord1266f2e9cd2f8570bbad08c17992543erandom1742572004536randomCodeserialNumber15629885126token 1742572004536 YKGblGFlmFDDbbnREFV'
    encrypt_str = t + "YKGblGFlmFDDbbnREFV" + e(params) + t + "YKGblGFlmFDDbbnREFV";
    # print(encrypt_str)
    return h(encrypt_str).upper()
